home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
hity wydania
/
Ubuntu 9.10 PL
/
karmelkowy-koliberek-desktop-9.10-i386-PL.iso
/
casper
/
filesystem.squashfs
/
usr
/
bin
/
bf_compact-bdb
< prev
next >
Wrap
Text File
|
2009-06-05
|
2KB
|
99 lines
#! /bin/sh
# bf_compact source_dir [wordlist_name...]
#
# use to compact wordlist.db
# replaces original directory with new one
# renames original directory with '.old' extension
# $Id: bf_compact.in 6749 2008-10-15 23:08:06Z clint $
set -e # die on errors
: ${BOGOFILTER:=bogofilter}
: ${BOGOUTIL:=bogoutil}
if [ -z "$1" ] ; then
echo 'usage: bf_compact source_dir [wordlist_name...]'
exit 1
fi
# extract home directory
BOGOHOME="$1"
shift
if [ ! -d "$BOGOHOME" ] ; then
echo "$BOGOHOME must be a directory, not a file"
exit 1
fi
# strip trailing slashes
while true; do
case "$BOGOHOME" in
*/) BOGOHOME=${BOGOHOME%/} ;;
*) break ;;
esac
done
export BOGOHOME
# find wordlists
if [ -n "$1" ] ; then
FILES="$@"
else
DIR=$($BOGOFILTER -QQ | grep ^bogofilter_dir | awk '{print $3}')
if [ "$BOGOHOME" != "$DIR" ] ; then
FILES=$(ls "$BOGOHOME"/*.db)
else
FILES=$($BOGOFILTER -QQ | grep ^wordlist | cut -f3 -d,)
fi
fi
BOGOTEMP="bf_compact.$$"
mkdir "$BOGOTEMP" || {
echo "Cannot create directory $BOGOTEMP. Abort."
exit 1
}
# copy Berkeley DB configuration if present
if test -f "$BOGOHOME"/DB_CONFIG ; then
cp -p "$BOGOHOME"/DB_CONFIG "$BOGOTEMP"/
fi
case "$($BOGOFILTER -V | grep Database:)" in
*"Berkeley DB"*)
# determine transactions
if test "$(find "$BOGOHOME/" -name "log.??????????" -print)" = "" ; then
TXN=no
else
TXN=yes
fi
;;
*)
TXN=noarg
;;
esac
# reload files
for FILE in $FILES ; do
NAME="$(basename $FILE)"
$BOGOUTIL --db-verify "$FILE" \
|| { echo "$FILE corrupted, aborting." ; rm -r "$BOGOTEMP" ; exit 1 ; }
$BOGOUTIL -d "$FILE" | case $TXN in
no|yes) $BOGOUTIL --db-transaction=no -l "$BOGOTEMP/$NAME" ;;
noarg) $BOGOUTIL -l "$BOGOTEMP/$NAME" ;;
esac
done
if [ $TXN = "yes" ] ; then
#create database environment files
$BOGOFILTER -e -C -d "$BOGOTEMP" --db-transaction=yes < /dev/null
fi
# remove $BOGOHOME.old so we don't move the new backup *into* it
# rather than renaming the backup to it.
rm -rf "$BOGOHOME.old"
mv "$BOGOHOME" "$BOGOHOME.old"
mv "$BOGOTEMP" "$BOGOHOME"